// Problem 031: Coin sums
// In the United Kingdom the currency is made up of pound (£) and pence (p). There are eight coins in general circulation:
// 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p), and £2 (200p).
// It is possible to make £2 in the following way:
// 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
// How many different ways can £2 be made using any number of coins?

package main

import (
	"fmt"
)

var pence []int = []int{1, 2, 5, 10, 20, 50, 100, 200}

func p031() {
	var ans int = 0
	pickCoin(200, 0, &ans)
	fmt.Println("Problem 031:", ans)
}

func pickCoin(remain, kind int, ans *int) {
	if remain == 0 {
		*ans++
		return
	}
	if kind > 7 || remain < pence[kind] {
		return
	}
	// pick or not
	pickCoin(remain-pence[kind], kind, ans)
	pickCoin(remain, kind+1, ans)
}
